package org.freehep.graphicsio.emf;

import java.util.BitSet;

/**
 * Allocates and frees handles for EMF files
 * 
 * @author Tony Johnson
 * @version $Id: EMFHandleManager.java,v 1.4 2009-08-17 21:44:45 murkle Exp $
 */
public class EMFHandleManager {
	private BitSet handles = new BitSet();

	private int maxHandle;

	public int getHandle() {
		int handle = nextClearBit();
		handles.set(handle);
		if (handle > maxHandle) {
			maxHandle = handle;
		}
		return handle;
	}

	public int freeHandle(int handle) {
		handles.clear(handle);
		return handle;
	}

	private int nextClearBit() {
		// return handles.nextClearBit(1); // JDK 1.4
		for (int i = 1;; i++) {
			if (!handles.get(i)) {
				return i;
			}
		}
	}

	public int highestHandleInUse() {
		return handles.length() - 1;
	}

	public int maxHandlesUsed() {
		return maxHandle + 1;
	}
}
